// pages/dahai/index.js
Page({
	onHide(){
		this.save()
	},
	onUnload(){
		this.save()
	},
	save(){
		if(!this.hasSave){
			this.hasSave=true
			let data={...this.data}
			delete data.__webviewId__
			wx.setStorageSync(this.key, data)
		}
	},
	async onLoad(options) { //生命周期函数--监听页面加载
		this.host='https://www.hbqcwk.com'
		this.key='dahai'
		let data=wx.getStorageSync(this.key)
		if(data) this.setData(data)
	},
	play(e){ //执行视频的点击操作
		let index=e.currentTarget.dataset.index //获取点击视频的索引号
		wx.navigateTo({ //跳转到播放页面
			url: `/pages/dahai/player?index=${index}`,
		})
	},
	onReachBottom(){ //触底加载更多视频列表信息
		this.types() //调用本页面中定义的方法要用this，这里不带参数用于区分用户实际点击类型的操作
	},
	search(e){ //执行搜索功能
		let searchKey=e.detail.value.trim() //获取搜索关键字
		if(!searchKey)return //没有实际内容直接返回
		this.setData({searchKey, [`menus[1].types[0].list`]:[], [`menus[1].types[0].nextPage`]:1},()=>{
			this.types({target:{dataset:{index:0}}}) //模拟用户点击“类型”
		})
	},
	async longpress(e){ //用于清空缓存的数据
		let menuIndex = e.target.dataset.index //点击菜单的索引号
		if(menuIndex==null)return
		if(menuIndex==0){ //长按的是刷新
			let r=await wx.showModal({
                content: '确信要重新更新菜单吗~',
            })
            if(r.confirm){
                this.hasSave=true
				wx.setStorageSync(this.key, null) //清空缓存的数据
				wx.navigateBack()
            }
		}
	},
	menus(e) { //用户点击菜单项时执行
		let oldIndex = this.data.menuIndex //上次点击的菜单项
		let menuIndex = e.target.dataset.index //点击菜单的索引号
		if(menuIndex==null)return
		let menus = this.data.menus
		if(menuIndex==0){ //点击的是刷新
			let typeIndex=menus[oldIndex].typeIndex //获取菜单下的类型的索引号
			if(typeIndex!=null){ //对指定视频“类型”列表的刷新操作
				let type=menus[oldIndex].types[typeIndex] //获取类型对象
				type.list=[] //清空类型下原有的列表信息
				type.nextPage=1 //从第一个页面开始获取数据
				this.setData({menus}, ()=>{ //更新页面数据，模拟用户点击
					this.types({target:{dataset:{index:typeIndex}}})
				})
			}else{ //是对指定类型的刷新，若不曾点击某视频类型，则无法刷新
				wx.showModal({ //提醒用户信息
					showCancel: false,
					content: '必须选择一个视频类型~',
				})
			}
			return
		}else{
			this.hasSave=false
			menus[oldIndex].selected = false //清除原点击菜单项的选择效果
			menus[menuIndex].selected = true //设置新点击菜单项的选择效果
			this.setData({ //动态设置页面数据
				menus,
				menuIndex
			})
		}
	},
	async types(e) { //(1)处理用户点击类型，(2)也可处理刷新及触底加载更多
		let menuIndex = this.data.menuIndex //当前菜单的索引号
		let menu = this.data.menus[menuIndex] //获取当前的菜单项
		let typeIndex = e?e.target.dataset.index:menu.typeIndex //点击类型的索引号
		if (typeIndex == null) return //点击的是“类型”所在的区域但不是某个具体的类型，而是空白处，直接返回
		this.hasSave=false
		let change = {} //记录有变化的数据项
		if(e){ //用户的点击操作
			let oldIndex = menu.typeIndex //原来点击类型的索引号
			if (oldIndex != null) change[`menus[${menuIndex}].types[${oldIndex}].selected`] = false //取消原有的选择
			change[`menus[${menuIndex}].types[${typeIndex}].selected`] = true //设置新的选择
			change[`menus[${menuIndex}].typeIndex`] = typeIndex //记录最近点击类型的索引号
			this.setData(change)
		}
		let type=menu.types[typeIndex]
		if(type.list && type.list.length>0 && e) return //用户点击类型且类型下有数据就直接返回

		let list = await this.getTypeList(menu.types[typeIndex]) //获取列表数据，用于：(1)没有列表数据时 (2)刷新 (3)触底加载更多
		if (list != null) { //成功获取到数据
			change={}
			if(list.length==0){ //但没有数据，显示提示信息
				wx.showModal({
					content: '没有发现更多的数据~',
					showCancel: false,
				})
			}else{ //增加新的数据
				let count=(type.list??[]).length, index=-1
				list.forEach(v=>{
					change[`menus[${menuIndex}].types[${typeIndex}].list[${++index+count}]`] = v
				})
			}
			change[`menus[${menuIndex}].types[${typeIndex}].nextPage`] = list.length==0? -1 : (type.nextPage??1) + 1 //设置下个页面，-1表示没有更多的数据了
			this.setData(change)
		} else { //读取数据失败，显示错误信息
			wx.showModal({
				content: '读取列表信息失败~',
				showCancel: false,
			})
		}
	},
	async getTypeList(type) { //获取指定类型的视频列表信息，包括搜索功能
		// console.log(type)
		let url, nextPage = type.nextPage
		if (nextPage == null) nextPage = 1
		if (nextPage == -1) return []
		if(type.id==null){ //对于搜索，其id等于null
			if(!this.data.searchKey){ //没有搜索关键字
				wx.showModal({
					showCancel: false,
					content: '没有发现有效的搜索内容~',
				})
				return
			}
			// https://www.hbqcwk.com/search/%E6%98%AF----------2---.html
			url = `${this.host}/search/${encodeURIComponent(this.data.searchKey)}----------${nextPage}---.html`
		}else{ //对于电影、电视剧、综艺、动漫的处理
			// https://www.hbqcwk.com/class/6.html
			url = `${this.host}/class/${type.id}-${nextPage}.html`
		}
		console.log(url)
		let app=getApp()
		let html = await app.request({	url	}) //获取页面内容
		if(html==null)return null
		let list = [] //存放视频列表信息
		let r, regex = /href="([^"]+)" title="([^"]+)" data-original="([^"]+)/gs //获取视频信息的正则表达式，g表示全局匹配，用于获取匹配的多条视频信息
		while (r = regex.exec(html)) {
			list.push({
				url: r[1], //视频的网址，/voddetail/107988.html
				title: r[2], //视频标题，硬汉狙击
				img: r[3], //视频图片，https://pic.wujinpp.com/upload/vod/20240702-1/5c8e2863b82c460ef130229f871e24ea.jpg
			})
		}
		return list //返回数组
	},

	data:{
		menuIndex: 2,
		menus:[
			{
				name:'[刷新]',
			},{
				name:'[搜索]',
				typeIndex: 0,
				types:[
					{ list:[] },
				]
			},{ 
				name: '电影',
				selected: true,
				types: [
					{ name: '动作片', id:6 },
					{ name: '喜剧片', id:7 },
					{ name: '爱情片', id:8 },
					{ name: '科幻片', id:9 },
					{ name: '恐怖片', id:10 },
					{ name: '剧情片', id:11 },
					{ name: '战争片', id:12 },
					{ name: '动画片', id:24 },
					{ name: '纪录片', id:23 },	
				],
			},{ 
				name: '电视剧',
				types: [
					{ name: '国产剧', id:13 },
					{ name: '香港剧', id:14 },
					{ name: '韩国剧', id:15 },
					{ name: '欧美剧', id:16 },
					{ name: '日本剧', id:21 },
					{ name: '其它剧', id:22 },
				],
			},{ 
				name: '综艺' ,
				types: [
					{ name: '大陆综艺', id:25 },
					{ name: '日韩综艺', id:26 },
					{ name: '港台综艺', id:27 },
					{ name: '欧美综艺', id:28 },
				],
			},{ 
				name: '动漫' ,
				types: [
					{ name: '国产动漫', id:29 },
					{ name: '日韩动漫', id:30 },
					{ name: '欧美动漫', id:31 },
					{ name: '其它动漫', id:32 },
				],
			},{ 
				name: '短剧' ,
				types: [
					{ name: '女频恋爱', id:34 },
					{ name: '反转爽剧', id:35 },
					{ name: '古装仙侠', id:36 },
					{ name: '年代穿越', id:37 },
					{ name: '脑洞悬疑', id:38 },
					{ name: '现代都市', id:39 },
				],
			},
		]
	}
})